import java.lang.Math;

public class Liczba
{
	private int n;
	private static char[] characters = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

	Liczba()
	{
	}
	
	Liczba(int n)
	{
		this.n = n;
	}

	Liczba(String n, int podstawa) throws LiczbaException
	{
		int value = 0;

		if(podstawa < 2 || podstawa > 16) throw new LiczbaException("Podstawa liczby spoza zakresu 2 - 16.\n");

		n = n.toUpperCase();

		//Czy liczba jest poprawna
		for(int i = 0; i < n.length(); ++i)
		{
			boolean is_correct = false;
			for(int w = 0; w < podstawa; ++w)
			{
				if(characters[w] == n.charAt(i))
				{
					//Liczba jest w tablicy - ok
					is_correct = true;
				}
			}
			//Znak nie istnieje w wybranym zakresie tablicy, więc nie jest poprawny
			if(!is_correct) throw new LiczbaException("Liczba zawiera niedozwolone znaki.\n");
		}

		//Konwersja liczby
		for(int i = 0; i < n.length(); ++i)
		{
			for(int w = 0; w < podstawa; ++w)
			{
				if(characters[w] == n.charAt(i))
				{
					value += w * Math.pow(podstawa, n.length() - i - 1);
					break;
				}
			}
		}
		this.n = value;
	}

	public String zapis(int podstawa) throws LiczbaException
	{
		String tmp_string = new String();
		int tmp = n;

		if(podstawa < 2 || podstawa > 16) throw new LiczbaException("Podstawa liczby spoza zakresu 2 - 16.\n");

		while(tmp != 0)
		{
			tmp_string += characters[tmp % podstawa];
			tmp /= podstawa;
		}

		char[] tmp_array = tmp_string.toCharArray();

		for(int i = 0; i < tmp_array.length / 2; ++i)
		{
			char tmp_char = tmp_array[i];
			tmp_array[i] = tmp_array[tmp_array.length - i - 1];
			tmp_array[tmp_array.length - i - 1] = tmp_char;
		}

		return String.valueOf(tmp_array);
	}
}
